package com.winchain.chainbill.bill.biz.receive.controller;

import com.shell.bee.base.annotation.Logging;
import com.shell.bee.base.utils.StringUtil;
import com.shell.bee.entity.mvc.RetMsg;
import com.shell.bee.persistence.model.PageLimit;
import com.shell.framework.utils.CommonFileUtil;
import com.winchain.chainbill.bill.base.po.CbRcv;
import com.winchain.chainbill.bill.biz.query.vo.CbRecQueryVo;
import com.winchain.chainbill.bill.biz.query.vo.CbRecVo;
import com.winchain.chainbill.bill.biz.receive.service.BillRcvAprvService;
import com.winchain.chainbill.bill.biz.receive.service.BillRcvQueryService;
import com.winchain.chainbill.bill.biz.receive.service.BillRcvService;
import com.winchain.chainbill.bill.biz.send.vo.BatchBillStats;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class BillReceiveController
{
  @Autowired
  private BillRcvAprvService billRcvAprvService;
  @Autowired
  private BillRcvQueryService billRcvQueryService;
  @Autowired
  private BillRcvService billRcvService;
  
  @RequestMapping
  @ResponseBody
  @Logging(module="����", methods="��������������")
  public List<CbRecVo> selectBillForReceiveList(PageLimit limit, CbRecQueryVo cbRecordQueryVo)
  {
    return this.billRcvQueryService.selectBillForRcvByPage(limit, cbRecordQueryVo);
  }
  
  @RequestMapping
  @ResponseBody
  @Logging(module="����", methods="������������������")
  public List<CbRecVo> selectBillForReceiveApprove(PageLimit limit, CbRecQueryVo cbRecordQueryVo)
  {
    return this.billRcvQueryService.selectBillForRcvApproveByPage(limit, cbRecordQueryVo);
  }
  
  @RequestMapping
  @ResponseBody
  @Logging(module="����", methods="����������������")
  public CbRecVo selectBillForReceive(String billId)
  {
    return this.billRcvQueryService.selectBillForRcv(billId);
  }
  
  @RequestMapping
  @ResponseBody
  @Logging(module="������������", methods="������������")
  public RetMsg pass(String phoneCode, String location, String billIds)
    throws Exception
  {
    if (StringUtil.emptyAndNull(billIds)) {
      new RetMsg("error", false, "��������");
    }
    String[] billIdArr = billIds.split(",");
    BatchBillStats<CbRcv> stats = this.billRcvAprvService.pass(phoneCode, location, billIdArr);
    if (billIdArr.length == stats.getAffectedRows()) {
      return new RetMsg("success", false, "����������������������", stats
        .getTxSnHost());
    }
    if (stats.getAffectedRows() == 0) {
      return new RetMsg("error", false, "������������", 
        CommonFileUtil.changMsg(stats.getAbnormalMsg()));
    }
    return new RetMsg("warning", false, "����������������", 
      CommonFileUtil.changMsg(stats.getAbnormalMsg()));
  }
  
  @RequestMapping
  @ResponseBody
  @Logging(module="������������", methods="������������")
  public RetMsg reject(String remark, String billIds)
    throws Exception
  {
    if (StringUtil.emptyAndNull(billIds)) {
      new RetMsg("error", false, "��������");
    }
    String[] billIdArr = billIds.split(",");
    BatchBillStats<CbRcv> stats = this.billRcvAprvService.reject(remark, billIdArr);
    if (billIdArr.length == stats.getAffectedRows()) {
      return new RetMsg("success", false, "��������������,����������");
    }
    if (stats.getAffectedRows() == 0) {
      return new RetMsg("error", false, "����������������", 
        CommonFileUtil.changMsg(stats.getAbnormalMsg()));
    }
    return new RetMsg("warning", false, "��������������������", 
      CommonFileUtil.changMsg(stats.getAbnormalMsg()));
  }
  
  @RequestMapping
  @ResponseBody
  @Logging(module="����", methods="����")
  public RetMsg receive(String billId, String fileIds, String contracts, String invoices, String phoneCode, String location)
  {
    if (StringUtil.emptyAndNull(billId)) {
      new RetMsg("error", false, "��������");
    }
    String txSnHost = this.billRcvService.receive(billId, fileIds, contracts, invoices, phoneCode, location);
    String msg;
    if ("0".equals(txSnHost))
    {
      msg = "������������������������������������������������������������������������";
      txSnHost = null;
    }
    else if ("-1".equals(txSnHost))
    {
      msg = "������������������������������������������������";
      txSnHost = null;
    }
    else
    {
      if ((txSnHost == null) || (txSnHost.length() <= 1)) {
        txSnHost = null;
      }
      msg = "������������������������������������������������";
    }
    return new RetMsg("success", false, msg, txSnHost);
  }
  
  @RequestMapping
  @ResponseBody
  @Logging(module="����", methods="����")
  public RetMsg deny(String remark, String billIds)
    throws Exception
  {
    if (StringUtil.emptyAndNull(billIds)) {
      new RetMsg("error", false, "��������");
    }
    String[] billIdArr = billIds.split(",");
    BatchBillStats<CbRcv> stats = this.billRcvService.deny(remark, billIdArr);
    if (billIdArr.length == stats.getAffectedRows()) {
      return new RetMsg("success", false, "��������", stats.getTxSnHost());
    }
    if (stats.getAffectedRows() == 0) {
      return new RetMsg("error", false, "��������", 
        CommonFileUtil.changMsg(stats.getAbnormalMsg()));
    }
    return new RetMsg("warning", false, "������������", 
      CommonFileUtil.changMsg(stats.getAbnormalMsg()));
  }
}
